/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.uniceub.fsw.testes.facade;

import br.uniceub.fsw.arquitetura.persistencia.transacao.Transacao;
import br.uniceub.fsw.testes.dao.CicloTesteDAO;
import br.uniceub.fsw.testes.dao.StatusCicloTesteDAO;
import br.uniceub.fsw.testes.vo.CicloTesteVO;
import br.uniceub.fsw.testes.vo.StatusCicloTesteVO;
import br.uniceub.fsw.util.Html;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletRequest;

/**
 *
 * @author Abrahao
 */
public class CicloTesteFacade {

    CicloTesteDAO dao = new CicloTesteDAO();
    StatusCicloTesteDAO stDAO = new StatusCicloTesteDAO();
    Html montarHtml = new Html();

    /**
     * Cria uma tabela com os ciclos de teste de uma OS
     * @param req
     * @return
     */
    public String listarCicloTeste(HttpServletRequest req) {
        StatusCicloTesteVO stVO = new StatusCicloTesteVO();
        List<CicloTesteVO> listaCicloVO = new ArrayList();
        StringBuffer sb = new StringBuffer();
        int idOS = Integer.parseInt(req.getParameter("idOrdemServico"));
        listaCicloVO = dao.consultarPorCdOrdemServico(idOS);
        sb.append("<tr>");
        sb.append("<td width='100%' align='center' valign='top' colspan=4>");
        sb.append("<BR>");
        sb.append("<B>Ciclos de Teste vinculados:</B>");
        sb.append("<BR>");
        sb.append("<BR>");
        sb.append("</td>");
        sb.append("</tr>");
        sb.append("<TABLE>");
        sb.append("<TR class='tituloTabela'>");
        sb.append("<TD>&nbsp;</TD>");
        sb.append("<TD> Ciclo de Teste </TD>");
        sb.append("<TD> Estado </TD>");
        sb.append("</TR>");
        for (int i = 0; i < listaCicloVO.size(); i++) {
            if (i % 2 == 0) {
                sb.append("<TR><TD>");
            } else {
                sb.append("<TR class='impar'><TD>");
            }
            sb.append("<input class='radio' type='radio' name='idCicloTeste' value='" + listaCicloVO.get(i).getIdCicloTeste() + "'/></TD>");
            sb.append("<TD> " + listaCicloVO.get(i).getNoCicloTeste() + "</TD>");
            stVO = stDAO.consultarPorId(listaCicloVO.get(i).getCdStatusCicloTeste());
            sb.append("<TD> " + stVO.getStCicloTeste() + "</TD>");
            sb.append("</TR>");
        }
        sb.append("</TABLE>");
        return sb.toString();
    }

    /**
     * Cria uma tabela com os detalhes de um ciclo de teste
     * @param req
     * @return
     */
    public String detalharCicloTeste(HttpServletRequest req) {
        CicloTesteVO cicloVO = new CicloTesteVO();
        StringBuffer sb = new StringBuffer();
        int idCiclo = Integer.parseInt(req.getParameter("idCicloTeste"));
        cicloVO = dao.consultarPorId(idCiclo);
        StatusCicloTesteVO stVO = new StatusCicloTesteVO();
        stVO = stDAO.consultarPorId(cicloVO.getCdStatusCicloTeste());

        sb.append("<TABLE>");
        sb.append("<input type='hidden' name='idCicloTeste' value='" + cicloVO.getIdCicloTeste() + "'>");
        sb.append("<TR>");
        sb.append("<td width='25%' align='right' valign='top'><B>Ciclo de Teste: </B></TD>");
        sb.append("<td valign='top' width='25%' align='left'>" + cicloVO.getNoCicloTeste() + "</TD>");
        sb.append("<td valign='top' width='25%' align='right'>&nbsp;</TD>");
        sb.append("<td valign='top' width='25%' align='left'>&nbsp;</TD>");
        sb.append("</TR>");
        sb.append("<TR><td width='25%' align='right' valign='top'><B>Descrição do Ciclo:</B></TD>");
        sb.append("<td width='75%' align='left' valign='top' colspan=3>" + cicloVO.getDsCicloTeste() + "</TD>");
        sb.append("</TR>");
        sb.append("<TR>");
        sb.append("<td width='25%' align='right' valign='top'><B>Analista de Teste:</B></TD>");
        sb.append("<TD>&nbsp;</TD>");
        sb.append("<TD td width='25%' align='right' valign='top'><B>Estado do Ciclo:</B></TD>");
        sb.append("<TD td width='25%' align='left' valign='top'>" + stVO.getStCicloTeste() + "</TD>");
        sb.append("</TR>");
        sb.append("</TABLE>");

        return sb.toString();

    }

    /**
     * Altera o estado do ciclo de teste para "Finalizado"
     * @param req
     */
    public void finalizarCiclo(HttpServletRequest req) {
        CicloTesteVO cicloVO = new CicloTesteVO();
        int idCiclo = Integer.parseInt(req.getParameter("idCicloTeste"));
        cicloVO = dao.consultarPorId(idCiclo);
        StatusCicloTesteVO stVO = new StatusCicloTesteVO();
        stVO = stDAO.consultarPorST("Finalizado");
        cicloVO.setCdStatusCicloTeste(stVO.getIdStatusCicloTeste());
        dao.alterar(cicloVO);
    }

    /**
     * Exclui do banco de dados o ciclo selecionado
     * @param req
     */
    public void excluirCiclo(HttpServletRequest req) {
        CicloTesteVO cicloVO = new CicloTesteVO();
        int idCiclo = Integer.parseInt(req.getParameter("idCicloTeste"));
        cicloVO = dao.consultarPorId(idCiclo);
        dao.excluir(cicloVO);
    }

    public String montarIncluirCiclo(HttpServletRequest req) {
        StringBuffer sb = new StringBuffer();
        sb.append("<TABLE>");
        sb.append("<TR>");
        sb.append("<TD>Número da OS:</TD><input disabled type='hidden' name='idOrdemServico' value='" + req.getParameter("idOrdemServico") + "'>");
        sb.append("<TD>" + req.getParameter("idOrdemServico") + "</TD>");
        sb.append("</TR>");
        sb.append("<TD>Nome do Ciclo:</TD>");
        sb.append("<TD>" + montarHtml.criarInput("noCicloTeste", "") + "</TD>");
        sb.append("</TR>");
        sb.append("<TR>");
        sb.append("<TD>Descrição do Ciclo:</TD>");
        sb.append("<TD>" + montarHtml.criarInput("dsCicloTeste", ""));
        sb.append("</TR>");
        sb.append("</TABLE>");
        return sb.toString();
    }

    public String montarAlterarCiclo(HttpServletRequest req) {
        StringBuffer sb = new StringBuffer();
        CicloTesteVO cicloVO = new CicloTesteVO();
        int idCiclo = Integer.parseInt(req.getParameter("idCicloTeste"));
        cicloVO = dao.consultarPorId(idCiclo);
        sb.append("<TABLE>");
        sb.append("<TR>");
        sb.append("<TD>Número da OS:</TD><input disabled type='hidden' name='idOrdemServico' value='" + req.getParameter("idOrdemServico") + "'>");
        sb.append("<TD>" + req.getParameter("idOrdemServico") + "</TD>");
        sb.append("</TR>");
        sb.append("<TD>Nome do Ciclo:</TD>");
        sb.append("<TD>" + montarHtml.criarInput("noCicloTeste", cicloVO.getNoCicloTeste()) + "</TD>");
        sb.append("</TR>");
        sb.append("<TR>");
        sb.append("<TD>Descrição do Ciclo:</TD>");
        sb.append("<TD>" + montarHtml.criarInput("dsCicloTeste", cicloVO.getDsCicloTeste()));
        sb.append("</TR>");
        sb.append("</TABLE>");
        return sb.toString();
    }

    public void alterarCiclo(HttpServletRequest req) {
        CicloTesteVO cicloVO = new CicloTesteVO();
        int idCiclo = Integer.parseInt(req.getParameter("idCicloTeste"));
        cicloVO = dao.consultarPorId(idCiclo);
        cicloVO.setNoCicloTeste(req.getParameter("noCicloTeste"));
        cicloVO.setDsCicloTeste(req.getParameter("dsCicloTeste"));
        try {
            Transacao.iniciar();
            dao.alterar(cicloVO);
            Transacao.efetivar();
        } catch (Exception ex) {
            System.out.println(ex);
            Transacao.desfazer();
        }
    }

    public void incluirCiclo(HttpServletRequest req) {
        CicloTesteVO cicloVO = new CicloTesteVO();
        cicloVO.setCdOrdemServico(Integer.parseInt(req.getParameter("idOrdemServico")));
        cicloVO.setNoCicloTeste(req.getParameter("noCicloTeste"));
        cicloVO.setDsCicloTeste(req.getParameter("dsCicloTeste"));
        cicloVO.setDtCriacao(new Date(System.currentTimeMillis()));
        StatusCicloTesteVO stVO = new StatusCicloTesteVO();
        stVO = stDAO.consultarPorST("Criado");
        cicloVO.setCdStatusCicloTeste(stVO.getIdStatusCicloTeste());
        try {
            Transacao.iniciar();
            dao.inserir(cicloVO);
            Transacao.efetivar();
        } catch (Exception ex) {
            System.out.println(ex);
            Transacao.desfazer();
        }
    }
}